import { dataTypes } from "./dataTypes";
import { IS_NULL } from "@/constant/index";
/**
 * 千分位
 */
export function thousandth(params) {
  let fixed = params.fixed || 2;
  let value = params.value;
  let zero = params.zero;
  let unitSymbol = params.unitSymbol || "¥";
  // 是否需要单位
  const isUnit = dataTypes().isBoolean(params.unit) ? params.unit : true;
  if (value === undefined || value === null) {
    return IS_NULL;
  }
  if (!value) {
    value = isUnit ? `${unitSymbol} ${value}` : value;
    value = zero ? `${value}.00` : value;
    return value;
  }
  value = value.toString();
  // 是否是负数
  const isNegative = value && value.substring(0, 1) === "-";
  // ,号替换为空
  value = value.replace(/,/g, "");
  // 分割小数
  const decimal = value.split(".");
  // 去除非数字
  value = decimal[0].replace(/\D/g, "");
  // 千分位
  let newValue = value.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
  // 小数处理
  let d = fillZero(decimal[1], fixed);
  // 是否有小数存在
  newValue = `${newValue}.${d}`;
  // 是否负数
  newValue = isNegative ? "-" + newValue : newValue;
  // 是否单位
  newValue = isUnit ? `${unitSymbol} ${newValue}` : newValue;
  // 是否设置主题
  if (params.column && params.theme) {
    params.column.className = isNegative ? "color-error" : "color-success";
  }
  // 返回
  return newValue;
}

/**
 * 补0
 */
export function fillZero(value, fixed = 2) {
  if (value) {
    value = value.replace(/\D/g, "");
  }
  const len = fixed - (value ? value.length : 0);
  // 大于指定的小数，截取
  if (len < 0) {
    return value.slice(0, fixed);
  }
  // 补0
  let zero = value || "";
  for (let i = 0; i < len; i++) {
    zero += 0;
  }
  return zero;
}
